package my290;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * 给定一种规律 pattern 和一个字符串 s ，判断 s 是否遵循相同的规律。
 *
 * 这里的 遵循 指完全匹配，例如， pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。
 *
 *
 */
public class SuanFa290 {

    public boolean wordPattern(String pattern, String s) {
        //根据空格分割字符串
          String[] s1 = s.split(" ");
        List<String> collect = Arrays.stream(s1).collect(Collectors.toList());
        System.out.println("根据空格分隔字符串" + collect);
        //c2s就时字符（C也就是Char）是键，String（s）是值。2 = to，也就是 '->' 对应中文就是  char(字符) -> String（字符串）
        Map<Character,String> c2s = new HashMap<>();
        Map<String,Character> s2c = new HashMap<>();

        int length = pattern.length();
        if (length != s1.length){
            return false;
        }
        for (int i = 0; i < length; i++) {
            char c = pattern.charAt(i);
            //注意 在String值的比较中 ”==“ 比较的是索引的值，所以我们要比较字面量是否相同的话应该使用equals
//          if (c2s.containsKey(c)){
//              if (!s1[i].equals(c2s.get(c))){
//                  return false;
//
//              }
//          }
//          if (s2c.containsKey(s1[i])){
//              if (!s2c.get(s1[i]).equals(c)){
//                  return  false;
//              }
//          }


            if ((c2s.containsKey(c) && !s1[i].equals(c2s.get(c))) || (s2c.containsKey(s1[i]) && s2c.get(s1[i]) != c)){
                return false;
            }
            c2s.put(c,s1[i]);
            s2c.put(s1[i],c);

        }


        return true;

    }
    public static void main(String[] args) {
        SuanFa290 suanFa290 = new SuanFa290();
        boolean b = suanFa290.wordPattern("aaa", "aa aa aa aa");
        System.out.println(b);

    }

}
